package com.gw.service.impl;

import com.gw.pojo.dto.FileUploadRequestDTO;
import com.gw.pojo.vo.FileUploadRequestVO;
import com.gw.properties.BucketProperties;
import com.gw.service.FileUploadRequestService;
import com.gw.utils.MinioUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

@Service
public class FileUploadRequestServiceImpl implements FileUploadRequestService {
    @Autowired
    private MinioUtil minioUtil;
    private String[] getURLs(MultipartFile[] files,String bucketName){
        /**
         * 内部函数，用于上传到minio服务器并返回url
         * @param files
         * @param bucketName
         * @return
         */
        int index=0;
        String[] urls=new String[files.length];
        // 对应活动|展示板块 ,图片附件
        for(MultipartFile file:files){
            urls[index]=minioUtil.upload(file, bucketName);
            index++;
        }
        return urls;
    }

    /**
     * 统一文件上传接口，根据类型上传到不同的minio bucket
     * @param fileDTO
     * @return
     */
    @Override
    public FileUploadRequestVO uploadFile(FileUploadRequestDTO fileDTO) {
        // 使用map返回结果，方便区分数据
        MultipartFile[] files=fileDTO.getFiles();
//        Map<String,String> resultMap=new HashMap<>();
//        resultMap.put("code")
        FileUploadRequestVO requestVO=new FileUploadRequestVO();
        if(files==null || files.length==0){
            throw new RuntimeException("uploade files 统一接口为空");
        }
        switch (fileDTO.getFileUsageTypeCode()){
            case 0:
                // 上传文件到对应工具文件的minio buket
                break;
            case 1:
                // 对应问答板块
                String[] imageUrls=getURLs(files,BucketProperties.POST);
                String imageStr=String.join(",",imageUrls);
//                resultMap.put("imagesUrl",imageStr);
                requestVO.setPostImagesUrl(imageStr);
                break;
            case 2:
                String[] pictureUrls=getURLs(files,BucketProperties.POST_SA);
                //TODO 由于目前设计的是只放一个图片一个附件到展示中，所以只用数组第一个元素即可，后续需要修改
//                resultMap.put("pictureUrl",pictureUrls[0]);
                requestVO.setPictureUrl(pictureUrls[0]);
                break;
            case 3:
                // 对应活动|展示板块 ,其他附件
               String attachmentUrls=getURLs(files,BucketProperties.POST_SA)[0];
//               resultMap.put("attachmentUrl",attachmentUrls);
                requestVO.setAttachmentUrl(attachmentUrls);
                break;
            default:
                throw new RuntimeException("上传文件类型码错误");
        }
        return requestVO;
     }
}
